24609
3380
Можно ли переключить видимость элемента с помощью функций .hide (), .show () или .toggle ()?
Как бы вы проверили, является ли элемент видимым или скрытым? 
1
2
следующий
Поскольку вопрос относится к одному элементу, этот код может быть более подходящим:
// Проверяет содержимое CSS для отображения: [none | block], игнорирует видимость: [true | false]
$ (элемент) .is (": видимый");
// То же самое работает со скрытыми
$ (элемент) .is (": скрыто");
Это то же самое, что и предложение twernt, но применяется к одному элементу; и он соответствует алгоритму, рекомендованному в FAQ по jQuery.
Мы используем is () jQuery для проверки выбранного элемента с другим элементом, селектором или любым объектом jQuery. Этот метод просматривает элементы DOM, чтобы найти совпадение, удовлетворяющее переданному параметру. Он вернет true, если есть совпадение, в противном случае вернет false.
|
Вы можете использовать скрытый селектор:
// Соответствует всем скрытым элементам
$ ('элемент: скрытый')
И видимый селектор:
// Соответствует всем видимым элементам
$ ('элемент: видимый')
|
if ($ (element) .css ('display') == 'none' || $ (element) .css ("visibility") == "hidden") {
// 'элемент' скрыт
}
Вышеупомянутый метод не учитывает видимость родителя. Чтобы рассмотреть и родительский объект, вы должны использовать .is (": hidden") или .is (": visible").
Например,

Вышеупомянутый метод будет считать div2 видимым, а: visible - нет. Но приведенное выше может быть полезно во многих случаях, особенно когда вам нужно выяснить, есть ли какие-либо блоки ошибок, видимые в скрытом родительском элементе, потому что в таких условиях: visible не будет работать.
|
Ни один из этих ответов не касается того, что я понимаю как вопрос, который я искал: «Как мне обрабатывать элементы, которые имеют видимость: скрытые?». Ни: visible, ни: hidden не справятся с этим, так как они оба ищут отображение в соответствии с документацией. Насколько я мог определить, нет селектора для обработки видимости CSS. Вот как я решил это (стандартные селекторы jQuery, может быть более сжатый синтаксис):
$ (". item"). each (function () {
if ($ (this) .css ("visibility") == "hidden") {
// обрабатываем невидимое состояние
} else {
// обрабатываем видимое состояние
}
});
|
Как определить состояние переключенного элемента?
Вы можете определить, свернут ли элемент или нет, используя селекторы: visible и: hidden.
var isVisible = $ ('# myDiv'). is (': visible');
var isHidden = $ ('# myDiv'). is (': hidden');
Если вы просто воздействуете на элемент на основе его видимости, вы можете просто включить: visible или: hidden в выражение селектора. Например:
$ ('# myDiv: visible'). animate ({left: '+ = 200px'}, 'медленно');
|
Часто, проверяя, видно ли что-то или нет, вы сразу же идете дальше и делаете с этим что-то еще. Цепочка jQuery упрощает это.
Итак, если у вас есть селектор, и вы хотите выполнить какое-либо действие с ним, только если он виден или скрыт, вы можете использовать filter (": visible") или filter (": hidden"), а затем связать его с действием, которое вы хотите взять.
Итак, вместо оператора if, например:
if ($ ('# btnUpdate'). is (": visible"))
{
$ ('# btnUpdate'). animate ({width: "toggle"}); // Скрыть кнопку
}
Или эффективнее, но еще хуже:
var button = $ ('# btnUpdate');
если (button.is (": видимый"))
{
button.animate ({ширина: "переключатель"}); // Скрыть кнопку
}
Все это можно сделать одной строкой:
$ ('# btnUpdate'). filter (": visible"). animate ({width: "toggle"});
|
Селектор: visible согласно документации jQuery:
У них нет отображаемого значения CSS.
Это элементы формы с type = "hidden".
Их ширина и высота явно равны 0.
Элемент-предок скрыт, поэтому элемент не отображается на странице.
Элементы с видимостью: скрытый или непрозрачность: 0 считаются видимыми, поскольку они по-прежнему занимают место в макете.
Это полезно в некоторых случаях и бесполезно в других, потому что, если вы хотите проверить, является ли элемент видимым (display! = None), игнорируя видимость родителей, вы обнаружите, что выполнение .css ("display") == 'none 'не только быстрее, но и корректно вернет проверку видимости.
Если вы хотите проверить видимость вместо отображения, вы должны использовать: .css ("visibility") == "hidden".
Также примите во внимание дополнительные примечания jQuery:
Поскольку: visible является расширением jQuery и не является частью спецификации CSS, запросы, использующие: visible, не могут воспользоваться преимуществом повышения производительности, обеспечиваемого собственным методом DOM querySelectorAll (). Чтобы добиться максимальной производительности при использовании: visible для выбора элементов, сначала выберите элементы с помощью селектора на чистом CSS, а затем используйте .filter (": visible").
Кроме того, если вас беспокоит производительность, вы должны проверить «Теперь вы видите меня… показать / скрыть производительность» (2010-05-04). И используйте другие методы для отображения и скрытия элементов.
|
Это работает для меня, и я использую show () и hide (), чтобы сделать мой div скрытым / видимым:
if ($ (this) .css ('display') == 'none') {
/ * ваш код находится здесь * /
} else {
/ * альтернативная логика * /
}
|
Как работает видимость элементов и jQuery;
Элемент может быть скрыт с помощью display: none,видимость: скрытая или непрозрачность: 0. Разница между этими методами:
display: none скрывает элемент и не занимает места;
видимость: скрытый скрывает элемент, но по-прежнему занимает место в макете;
opacity: 0 скрывает элемент как «visibility: hidden», и он по-прежнему занимает место в макете; единственная разница в том, что непрозрачность позволяет сделать элемент частично прозрачным;
if ($ ('. target'). is (': hidden')) {
$ ('. цель'). шоу ();
} else {
$ ('. цель'). hide ();
}
if ($ ('. target'). is (': visible')) {
$ ('. цель'). hide ();
} else {
$ ('. цель'). шоу ();
}
if ($ ('. target-visibility'). css ('visibility') == 'hidden') {
$ ('. target-visibility'). css ({
видимость: "видимый",
дисплей: ""
});
} else {
$ ('. target-visibility'). css ({
видимость: «скрытая»,
дисплей: ""
});
}
if ($ ('. target-visibility'). css ('opacity') == "0") {
$ ('. target-visibility'). css ({
непрозрачность: «1»,
дисплей: ""
});
} else {
$ ('. target-visibility'). css ({
непрозрачность: «0»,
дисплей: ""
});
}
Полезные методы переключения jQuery:
$ ('. click'). click (function () {
$ ('. цель'). toggle ();
});
$ ('. click'). click (function () {
$ ('. цель'). slideToggle ();
});
$ ('. click'). click (function () {
$ ('. цель'). fadeToggle ();
});
|
Вы также можете сделать это с помощью обычного JavaScript:
function isRendered (domObj) {
if ((domObj.nodeType! = 1) || (domObj == document.body)) {
вернуть истину;
}
if (domObj.currentStyle && domObj.currentStyle ["display"]! = "none" && domObj.currentStyle ["visibility"]! = "hidden") {
return isRendered (domObj.parentNode);
} else if (window.getComputedStyle) {
var cs = document.defaultView.getComputedStyle (domObj, null);
if (cs.getPropertyValue ("display")! = "none" && cs.getPropertyValue ("visibility")! = "hidden") {
return isRendered (domObj.parentNode);
}
}
вернуть ложь;
}
Примечания:
Работает везде
Работает для вложенных элементов
Работает с CSS и встроенными стилями
Не требует каркаса
|
Я бы использовал класс CSS .hide {display: none! Important; }.
Для скрытия / отображения я вызываю .addClass ("hide") /. RemoveClass ("hide"). Для проверки видимости я использую .hasClass ("hide").
Это простой и понятный способ проверять / скрывать / отображать элементы, если вы не планируете использовать методы .toggle () или .animate ().
|
Демо ссылка
$ ('# clickme'). click (function () {
$ ('# книга'). toggle ('slow', function () {
// Анимация завершена.
alert ($ ('# книга'). is (": visible")); // <--- TRUE, если Visible False, если скрыт
});
});

кликните сюда
Источник: Blogger Plug n Play - инструменты и виджеты jQuery: как узнать, является ли элемент скрытым или видимым с помощью jQuery | Можно просто использовать скрытый или видимый атрибут, например: $ ('элемент: скрытый') $ ('элемент: видимый') Или вы можете упростить то же самое следующим образом. $ (элемент) .is (": видимый") | ebdiv должен быть установлен в style = "display: none;". Он работает как для отображения, так и для скрытия: $ (документ) .ready (функция () { $ ("# eb"). click (function () { $ ("# ebdiv"). toggle (); }); }); | Другой ответ, который вы должны принять во внимание: если вы скрываете элемент, вы должны использовать jQuery, но вместо того, чтобы скрывать его, вы удаляете весь элемент, но вы копируете его HTML-содержимое и сам тег в переменную jQuery, а затем все, что вам нужно сделать, это проверить, есть ли такой тег на экране, используя обычный if (! $ ('# thetagname'). length). | При тестировании элемента по сравнению с селектором: hidden в jQuery следует учитывать, что элемент с абсолютным позиционированием может быть распознан как скрытый, хотя их дочерние элементы видны. Во-первых, это кажется несколько нелогичным - хотя более внимательное рассмотрение документации jQuery дает соответствующую информацию: Элементы можно считать скрытыми по нескольким причинам: [...] Их ширина и высота явно равны 0. [...] Таким образом, это действительно имеет смысл в отношении блочной модели и вычисленного стиля для элемента. Даже если ширина и высота не установлены явно на 0, они могут быть установлены неявно. Взгляните на следующий пример: console.log ($ ('. foo'). is (': hidden')); // правда console.log ($ ('. bar'). is (': hidden')); // ложный .foo { позиция: абсолютная; слева: 10 пикселей; верх: 10 пикселей; фон: # ff0000; } .бар { позиция: абсолютная; слева: 10 пикселей; верх: 10 пикселей; ширина: 20 пикселей; высота: 20 пикселей; фон: # 0000ff; }
Обновление для jQuery 3.x: С jQuery 3 описанное поведение изменится! Элементы будут считаться видимыми, если у них есть поля макета, в том числе с нулевой шириной и / или высотой. JSFiddle с jQuery 3.0.0-alpha1: http://jsfiddle.net/pM2q3/7/ Затем тот же код JavaScript будет иметь следующий вывод: console.log ($ ('. foo'). is (': hidden')); // ложный console.log ($ ('. bar'). is (': hidden'));// ложный | Это может сработать: ожидать ($ ("# message_div"). css ("дисплей")). toBe ("нет"); | Пример: $ (документ) .ready (функция () { if ($ ("# checkme: hidden"). length) { console.log («Скрытый»); } }); | Чтобы проверить, не видно ли, я использую!: if (! $ ('# book'). is (': visible')) { alert ('# книга не отображается') } Или следующее - это тоже sam, сохраняющий селектор jQuery в переменной, чтобы повысить производительность, когда он вам нужен несколько раз: var $ book = $ ('# книга') if (! $ book.is (': visible')) { alert ('# книга не отображается') } | Используйте переключение классов, а не редактирование стилей. . . Использовать классы, предназначенные для «скрытия» элементов, несложно, а также это один из самых эффективных методов. Переключение класса «скрытый» со стилем отображения «none» будет работать быстрее, чем редактирование этого стиля напрямую. Я довольно подробно объяснил некоторые из этого в вопросе о переполнении стека. Как сделать два элемента видимыми / скрытыми в одном div. Лучшие практики и оптимизация JavaScript Вот поистине поучительный видеоролик Google Tech Talk, сделанный фронтенд-инженером Google Николасом Закасом: Ускорьте свой Javascript (YouTube) | Пример использования видимой проверки для активированного блокировщика рекламы: $ (документ) .ready (функция () { if (! $ ("# ablockercheck"). is (": visible")) $ ("# ablockermsg"). text ("Пожалуйста, отключите блокировщик рекламы."). show (); });
ablockercheck - это идентификатор, который блокирует блокировщик рекламы. Поэтому, проверив его, если он виден, вы сможете определить, включен ли блокировщик рекламы. | В конце концов, ни один из примеров мне не подходит, поэтому я написал свой. Тесты (без поддержки фильтра Internet Explorer: альфа): а) Проверьте, не скрыт ли документ б) Проверьте, имеет ли элемент нулевую ширину / высоту / непрозрачность или отображение: нет / видимость: скрыто во встроенных стилях c) Проверьте, не скрыт ли центр (также потому, что это быстрее, чем тестирование каждого пикселя / угла) элемента другим элементом (и всеми предками, например: overflow: hidden / scroll / один элемент над другим) или краями экрана г) Проверьте, имеет ли элемент нулевую ширину / высоту / непрозрачность или отображение: нет / видимость: скрыто в вычисленных стилях (среди всех предков) Проверено на Android 4.4 (собственный браузер / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (режимы документов Internet Explorer 5-11 + Internet Explorer 8 на виртуальная машина) и Safari (Windows / Mac / iOS). var is_visible = (function () { var x = window.pageXOffset? window.pageXOffset + window.innerWidth - 1: 0, y = window.pageYOffset? window.pageYOffset + window.innerHeight - 1: 0, relative = !! ((! x &&! y) ||! document.elementFromPoint (x, y)); функция внутри (дочерний, родительский) { while (child) { если (потомок === родитель) вернуть истину; child = child.parentNode; } вернуть ложь; }; return function (elem) { если ( document.hidden || elem.offsetWidth == 0 || elem.offsetHeight == 0 || elem.style.visibility == 'скрытый' || elem.style.display == 'none' || elem.style.opacity === 0 ) return false; var rect = elem.getBoundingClientRect (); if (relative) { если (! внутри (document.elementFromPoint (rect.left + elem.offsetWidth / 2, rect.top + elem.offsetHeight / 2), elem)) return false; } иначе, если ( ! внутри (document.elementFromPoint (rect.left + elem.offsetWidth / 2 + window.pageXOffset, rect.top + elem.offsetHeight / 2 + window.pageYOffset), elem) || ( rect.top + elem.offsetHeight / 2 <0 || rect.left + elem.offsetWidth / 2 <0 || rect.bottom - elem.offsetHeight / 2> (window.innerHeight || document.documentElement.clientHeight) || rect.right - elem.offsetWidth / 2> (window.innerWidth || document.documentElement.clientWidth) ) ) return false; if (window.getComputedStyle || elem.currentStyle) { var el = elem, comp = null; while (el) { if (el === document) {break;} else if (! el.parentNode) вернуть false; comp = window.getComputedStyle? window.getComputedStyle (эль, ноль): el.currentStyle; if (comp && (comp.visibility == 'hidden' || comp.display == 'none' || (typeof comp.opacity! == 'undefined' && comp.opacity! = 1))) return false; el = el.parentNode; } } вернуть истину; } }) (); Как использовать: is_visible (elem) // логическое | Вам нужно проверить как ... Отображение, так и видимость: if ($ (this) .css ("display") == "none" || $ (this) .css ("visibility") == "hidden") { // Элемент не виден } else { // Элемент виден } Если мы проверим $ (this) .is (": visible"), jQuery автоматически проверит обе эти вещи. | Может ты сможешь сделать что-то подобное $ (документ) .ready (функция () { var visible =$ ('# элемент'). is (': visible'); if (visible) { предупреждение ("видимый"); // Код } еще { предупреждение («скрыто»); } }); Имя | Просто проверьте видимость, проверив логическое значение, например: if (this.hidden === false) { // Ваш код } Я использовал этот код для каждой функции. В противном случае вы можете использовать is (': visible') для проверки видимости элемента. | Поскольку элементы с visibility: hidden или opacity: 0 считаются видимыми, поскольку они по-прежнему занимают место в макете (как описано для jQuery: visible Selector), мы можем проверить, действительно ли элемент виден следующим образом: function isElementReallyHidden (el) { return $ (el) .is (": hidden") || $ (el) .css ("visibility") == "hidden" || $ (el) .css ('непрозрачность') == 0; } var booElementReallyShowed =! isElementReallyHidden (someEl); $ (someEl) .parents (). each (function () { if (isElementReallyHidden (это)) { booElementReallyShowed = false; } }); | Но что, если CSS этого элемента выглядит следующим образом? .элемент{ позиция: абсолютная; слева: -9999; } Итак, этот ответ на вопрос о переполнении стека, как проверить, находится ли элемент за пределами экрана, также следует учитывать. | Функция может быть создана для проверки атрибутов видимости / отображения, чтобы оценить, отображается ли элемент в пользовательском интерфейсе или нет. function checkUIElementVisible (element) { return ((element.css ('display')! == 'none') && (element.css ('visibility')! == 'скрытый')); } Рабочая скрипка | Также вот тернарное условное выражение для проверки состояния элемента, а затем для его переключения: $ ('someElement'). on ('click', function () {$ ('elementToToggle'). is (': visible')? $ ('elementToToggle'). hide ('slow'): $ ('elementToToggle ') .show (' медленно ');}); | if ($ ('# postcode_div'). is (': visible')) { if ($ ('# postcode_text'). val () == '') { $ ('# spanPost'). текст ('\ u00a0'); } else { $ ('# spanPost'). текст ($ ('# postcode_text'). val ()); } | 1 2 следующий Весьма активный вопрос. Заработайте 10 репутации, чтобы ответить на этот вопрос. Требование репутации помогает защитить этот вопрос от спама и отсутствия ответов. Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками javascript jquery dom visibility или задайте свой вопрос.